var QQMapWX = require("../../libs/qqmap-wx-jssdk");
// 实例化API核心类
var qqmapsdk = new QQMapWX({
  key: "HLBBZ-UXNCV-OUOPC-5AT7V-Y3UG6-UYB5U", // 必填
});

Page({
  data: {
    statusBarHeight: 0, // 状态栏高度
    navHeight: 0, // 导航栏高度
    latitude: 35.0935,
    longitude: 112.6254,
    scale: 11,
    markers: [],
    localItems: [
      { name: "景点" },
      { name: "休息点" },
      { name: "停车场" },
      { name: "卫生间" },
    ],
    activeLocalIndex: 0,
    isShow: false,
    distance: "",
    cost: "",
    polyline: [],
    troubleshootingInfo: [],
    debugInfo: "",
    errorMsg: "",
    srcLat: 35.50,
    srcLng: 113.87,
    strategyArrlat: 34.52,
    strategyArrlng: 110.07,
  },

  onLoad: function(options) {
    console.log("页面onLoad函数被调用", options);
    // 设置自定义导航栏高度
    this.setNavBarHeight();
    
    // 从接口获取起点和终点坐标
    if (options.map_id) {
      this.fetchRouteData(options.map_id);
    } else {
      // 如果没有map_id参数，使用默认坐标
      setTimeout(() => {
        this.calculateRoute();
      }, 1000);
    }
  },

  // 设置自定义导航栏高度
  setNavBarHeight() {
    console.log("设置导航栏高度");
    try {
      const systemInfo = wx.getSystemInfoSync();
      const statusBarHeight = systemInfo.statusBarHeight || 0;
      const navHeight = statusBarHeight + 60;

      this.setData({
        statusBarHeight: statusBarHeight,
        navHeight: navHeight,
      });
      console.log("导航栏高度设置完成", statusBarHeight, navHeight);
    } catch (e) {
      this.setData({
        statusBarHeight: 20,
        navHeight: 64,
      });
      console.error("获取系统信息失败", e);
    }
  },

  // 从接口获取路线数据
  fetchRouteData(mapId) {
    console.log("开始获取路线数据，map_id:", mapId);
    
    // 显示加载提示
    wx.showLoading({
      title: '加载中...',
    });
    
    wx.request({
      url: 'https://jingqu.kuxia.top/app/map/index',
      method: 'POST',
      data: {
        map_id: 24
      },
      success: (res) => {
        console.log("获取路线数据成功", res);
        if (res.statusCode === 200 && res.data) {
          
          if (Array.isArray(res.data) && res.data.length >= 2) {
            const startPoint = res.data[0];
            const endPoint = res.data[1];
            
            if (startPoint.lat && startPoint.lng && 
                endPoint.lat && endPoint.lng) {
              this.setData({
                srcLat: parseFloat(startPoint.lat),
                srcLng: parseFloat(startPoint.lng),
                strategyArrlat: parseFloat(endPoint.lat),
                strategyArrlng: parseFloat(endPoint.lng)
              });
              
              console.log("设置起点终点坐标", {
                srcLat: this.data.srcLat,
                srcLng: this.data.srcLng,
                strategyArrlat: this.data.strategyArrlat,
                strategyArrlng: this.data.strategyArrlng
              });
              
              // 获取坐标后计算路线
              this.calculateRoute();
            } else {
              console.error("数组元素缺少坐标信息", res.data);
              this.setData({
                errorMsg: '数据格式错误：缺少坐标信息'
              });
            }
          } else {
            console.error("接口返回数据格式不正确", res.data);
            this.setData({
              errorMsg: '数据格式错误：不是有效的数组'
            });
          }
        } else {
          console.error("接口返回错误", res);
          this.setData({
            errorMsg: '获取路线数据失败'
          });
        }
      },
      fail: (err) => {
        console.error("请求路线数据失败", err);
        this.setData({
          errorMsg: '请求失败，请检查网络'
        });
      },
      complete: () => {
        // 隐藏加载提示
        wx.hideLoading();
      }
    });
  },

  // 计算路线
  calculateRoute() {
    console.log("开始路线规划", {
      from: { latitude: this.data.srcLat, longitude: this.data.srcLng },
      to: { latitude: this.data.strategyArrlat, longitude: this.data.strategyArrlng }
    });
    
    // 检查起点终点是否相同
    if (this.data.srcLat === this.data.strategyArrlat && 
        this.data.srcLng === this.data.strategyArrlng) {
      this.setData({
        errorMsg: '起点和终点不能相同',
        polyline: []
      });
      return;
    }

    qqmapsdk.direction({
      mode: 'driving',
      from: {
        latitude: this.data.srcLat,
        longitude: this.data.srcLng
      },
      to: {
        latitude: this.data.strategyArrlat,
        longitude: this.data.strategyArrlng
      },
      success: (res) => {
        console.log("路线规划接口调用成功", res);
        
        // 增加数据有效性检查
        if (!res.result || !res.result.routes || res.result.routes.length === 0) {
          this.setData({
            errorMsg: '未找到可用路线',
            polyline: []
          });
          return;
        }
        
        var ret = res;
        var coors = ret.result.routes[0].polyline;
        
        // 检查坐标数组有效性
        if (!coors || !Array.isArray(coors) || coors.length < 2) {
          this.setData({
            errorMsg: '获取路线坐标失败',
            polyline: []
          });
          return;
        }
        
        var pl = [];
        // 坐标解压（修复了解压算法）
        var kr = 1000000;
        // 先复制原始数组避免修改源数据
        let tempCoors = [...coors].map(Number);
        
        for (let i = 2; i < tempCoors.length; i++) {
          tempCoors[i] = tempCoors[i - 2] + tempCoors[i] / kr;
        }
        
        // 处理坐标点并过滤无效值
        for (let i = 0; i < tempCoors.length; i += 2) {
          if (i + 1 >= tempCoors.length) break;
          
          const lat = tempCoors[i];
          const lng = tempCoors[i + 1];
          
          // 过滤无效的经纬度值
          if (lat && lng && !isNaN(lat) && !isNaN(lng) && 
              lat >= -90 && lat <= 90 && lng >= -180 && lng <= 180) {
            pl.push({
              latitude: lat,
              longitude: lng
            });
          }
        }
        
        // 打印 polyline 数据
        console.log('Polyline points count:', pl.length);
        
        // 检查是否有有效坐标点
        if (pl.length === 0) {
          this.setData({
            errorMsg: '路线坐标解析失败',
            polyline: []
          });
          return;
        }
        
        // 设置polyline属性，将路线显示出来
        this.setData({
          latitude: pl[0].latitude,
          longitude: pl[0].longitude,
          polyline: [{
            points: pl,
            color: '#2A82E4',
            width: 5,
            dottedLine: false,  // 明确设置为实线
            arrowLine: true     // 显示箭头
          }],
          errorMsg: ''
        });
        console.log("路线规划成功，点数量：", pl.length);
      },
      fail: (error) => {
        console.error("路线规划失败", error);
        this.setData({
          errorMsg: '路线规划失败: ' + (error.message || '未知错误'),
          polyline: []
        });
      },
      complete: (res) => {
        console.log("路线规划完成", res);
      }
    });
  },

  // 获取当前位置
  getLocation() {
    wx.getLocation({
      type: "gcj02",
      success: (res) => {
        this.setData({
          latitude: res.latitude,
          longitude: res.longitude,
          srcLat: res.latitude,
          srcLng: res.longitude
        });
        console.log("获取位置成功", res);
        // 重新计算路线
        this.calculateRoute();
      },
      fail: (err) => {
        console.error("获取位置失败", err);
        wx.showToast({
          title: "获取位置失败，请检查权限",
          icon: "none",
        });
      },
    });
  },

  back() {
    wx.navigateBack({
      fail: () => {
        wx.redirectTo({
          url: "/pages/index/index",
        });
      },
    });
  },

  jumpToHome() {
    wx.redirectTo({
      url: "/pages/index/index",
    });
  },

  selectLocal(e) {
    const index = e.currentTarget.dataset.index;
    this.setData({
      activeLocalIndex: index,
    });
  },

  showMore() {
    this.setData({
      isShow: !this.data.isShow,
    });
  },
});